There are many applications where alphabetic data needs to be entered into a computer or computing system or apparatus. Such data, representing the written alphabet of a language, is usually represented in a digitally encoded format. Very often the data is coded in the American Standard Character Interchange Interface (ASCII) coding standard, the ANSI X3.4-1986 standard. Internationally, this standard is known as ISO/IEC 646:1991. Another coding standard used to represent alphabetic characters is the Unicode standard. In Unicode, each character is represented by two bytes, instead of one byte used in ASCII. The Unicode Consortium first published the Unicode standard in 1991 as “The Unicode Standard” (ISBN 0321185781). The latest revision is 4.1. Unicode shares its character repertoire with ISO/IEC 10646.
A common and convenient method to enter alphabetic data into a computer or computing apparatus is via the keyboard input. Many application programs available on the market expect data entry via the keyboard. However, the computer keyboard key codes used to represent keyboard characters are quite different from ASCII or Unicode codes. To modify such application programs to accept ASCII or Unicode format data from other input ports available on standard computers, such as the serial RS-232 ports, commonly known as COM ports, or the parallel port intended for printer use, commonly known as the LPT port, is complicated and expensive.
Therefore, it would be useful to have means to convert ASCII or Unicode data into the electrical and logical format used by the keyboard of a computer. There are two PC computer keyboard standards in wide use today. One is the PS/2 keyboard standard. A more recent standard is the Universal Serial Bus (USB) Human Interface Device (HID) keyboard standard, which is replacing the PS/2 standard.
A device to translate ASCII coded data into the PC PS/2 keyboard standard, model VIP-335, is available from Vetra Systems Corporation. This device cannot be used on an USB port of a computer, however, only on the PS/2 port specifically dedicated to keyboard input. The PS/2 keyboard electrical interface, the codes representing keys and keyboard command protocol are radically different from the USB protocol and its instantiation for keyboard data. For instance, the PS/2 keyboard protocol has a unique code for the release of a keyboard key, while the USB standard does not and uses a significantly different method to indicate keyboard key release. Key information is sent by the PS/2 keyboard to the PC only when a key is activated or released. Every PS/2 keyboard data message is limited to information about one key, reporting either its depression or release. In the USB standard, the computer interrogates the keyboard for data every 10 milliseconds. The USB keyboard message can report the depression or release of up to 14 keys every 10 milliseconds.
The USB ports available on new computers are universal. That is, they are not dedicated to any one device, and can accept many devices. When a device is plugged in to such a port, the computer starts a process called “enumeration” by which the computer finds out what type of device has just been plugged in. For a keyboard to be recognized as such, it must provide appropriate responses and information to the requests from the computer during the enumeration process.
The complexity of USB keyboard key encoding, the electrical signaling methods, and the USB protocol requirements for a keyboard device are such that it is not possible simply to modify a device intended for connection to a PS/2 keyboard input. A radically different approach is necessary.
The present invention overcomes these problems by providing a method and apparatus to accept data encoded according to the ASCII, Unicode, or other coding standards and converting such data into keyboard codes in accordance with USB Human Interface Device (HID) keyboard standards. It also allows extension of the incoming coding to represent keys of the standard PC keyboard that may be needed in some applications, such as providing test scripts, and that are not part of the ASCII or Unicode standards. One example of such keys are the left and right Control keys, the arrow keys, left, right, up, down, the position control keys (Home, End, for instance), and the functions keys, usually labeled F1-F12, or even higher, which are found on standard and common keyboards used with many computers.